// util/redis.go
package util

import (
	"context"
	"fmt"
	"gin-zc/config"
	"time"

	"github.com/go-redis/redis/v8"
)

// RedisClient 全局Redis客户端实例
var RedisClient *redis.Client

// InitRedis 初始化Redis连接
func InitRedis(cfg *config.Config) error {
	// 创建Redis客户端
	RedisClient = redis.NewClient(&redis.Options{
		Addr:         cfg.RedisAddr,
		Password:     cfg.RedisPassword,
		DB:           int(cfg.RedisDB),
		PoolSize:     int(cfg.RedisPoolSize),
		MinIdleConns: 5,                // 最小空闲连接数（优化连接池性能）
		IdleTimeout:  30 * time.Second, // 空闲连接超时时间
		ReadTimeout:  cfg.RedisTimeout, // 读超时
		WriteTimeout: cfg.RedisTimeout, // 写超时
	})

	// 测试连接（Ping Redis）
	ctx, cancel := context.WithTimeout(context.Background(), cfg.RedisTimeout)
	defer cancel()
	if err := RedisClient.Ping(ctx).Err(); err != nil {
		return fmt.Errorf("Redis连接失败: %w", err)
	}

	return nil
}
